/**
 * 
 */
package fr.gfi.agraf.vue.action.login;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;
import org.springframework.util.CollectionUtils;

import com.opensymphony.xwork2.ActionSupport;

import fr.gfi.agraf.utils.PropertiesUtils;
import fr.gfi.agraf.vue.bean.ProfilDTO;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Fw
 *
 */
public class ChoisirProfilAction extends ActionSupport implements SessionAware {

	/**
	 * généré par Java
	 */
	private static final long serialVersionUID = 5143061178443380249L;

	private static final String ERREUR_ID_CHOIX_PROFIL = "erreur.id.profil.incorrect";

	private Map<String, Object> session;

	private int profilSelect;

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.opensymphony.xwork2.ActionSupport#execute()
	 */
	@Override
	public String execute() {
		if (profilSelect != 0 && verifierProfilSelectValideEtAjoutSession()) {
			return SUCCESS;
		}
		addActionError(PropertiesUtils.getProperty(ERREUR_ID_CHOIX_PROFIL));
		return ERROR;
	}

	/**
	 * verifie si l'id profil récupéré correspond bien a un profil possible pour
	 * cet utilisateur
	 * 
	 * @return
	 */
	private boolean verifierProfilSelectValideEtAjoutSession() {
		final UtilisateurDTO userConnecte = (UtilisateurDTO) session.get(LoginAction.UTILISATEUR);
		if (userConnecte != null && !CollectionUtils.isEmpty(userConnecte.getListeProfilDTO())) {
			for (final ProfilDTO profil : userConnecte.getListeProfilDTO()) {
				if (profil.getId() == profilSelect) {
					session.put(LoginAction.PROFIL_CONNECTE, profil);
					return true;
				}
			}
		}
		return false;
	}

	public void setSession(final Map<String, Object> session) {
		this.session = session;
	}

	public int getProfilSelect() {
		return profilSelect;
	}

	public void setProfilSelect(final int profilSelect) {
		this.profilSelect = profilSelect;
	}

}
